java Jersey测试框架为grizzly中的所有未知路径定义默认错误响应
为了测试连接到facebook graph API的API,我们使用基于Jersey测试框架和grizzly的模拟服务器设置:
@Path("/" + PostRest.RESOURCE)
@Produces("application/json")
public class PostRest {
public static final String RESOURCE = "111_222";
@GET
public Response getPost(@QueryParam("access_token") String access_token) {
if (access_token != VALID_TOKEN) {
return Response.status(400).entity(createErrorJson()).build();
}
return Response.status(200).entity(createSomeJsonString()).build();
}
现在,虽然我可以用正确的错误响应对无效或丢失的访问令牌作出反应,但我还想测试我的API在尝试访问facebook上的未知资源(即未知路径)时是否正确反应
现在我从灰熊那里得到了一个404,很明显,如果我试图访问,比如说“/111_2”,但facebook似乎捕捉到了这个错误,并将其包装在一个Json响应中,其中包含字符串“false”,状态为200
所以。。。如何设置要返回的测试框架
Response.status(200).entity("false").build();
每次调用它都需要一个已知的路径
基本示例:
@ContextConfiguration({ "classpath:context-test.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest extends JerseyTest {
@Inject
private SomeConnection connection;
private String unkownId = "something";
public SomeTest() throws Exception {
super("jsonp", "", "com.packagename.something");
}
@Test(expected = NotFoundException.class)
public void testUnkownObjectResponse() throws NotFoundException {
// here it should NOT result in a 404 but a JSON wrapped error response
// which will be handled by the Connection class and
// result in a custom exception
connection.getObject(unkownId);
}
或者我可以让灰熊按照自己的意愿行事强>
谢谢
# 1 楼答案
显然,facebook有自己的拦截错误的服务。同样的事情也应该在代码中完成。只需公开自己的测试服务即可拦截所有请求
此服务将生成您想要的任何响应。所以像http://mytest/test/errorTrap/111_2这样的任何不存在的页面都会被测试服务截取,并为您生成预期的响应